/*
 * ContextTable.h
 *
 *  Created on: 27/11/2009
 *      Author: ngonzalez
 */

#ifndef CONTEXTTABLE_H_
#define CONTEXTTABLE_H_


#include <list>
#include <string>
#include <iostream>


using namespace std;


typedef struct {

	char caracter;
	int frecuencia;


}NodoListaContexto;

typedef struct {

	char caracter;

	int divisor;

	list <NodoListaContexto> *contexto;

}deListas;

class ContextTable {

		int divisorInicial;


		private:  list <char> caracteresYaExistentes;

		private:  list <deListas*> contextos;


		public: ContextTable();
		public: ContextTable(int cantDeCaracteresPosibles);

		public: virtual ~ContextTable();

		/**
		 * Función que recibe un contexto y actualiza la frecuencia del caracter de aparicion dado ese contexto
		 *
		 */

		public: void updateTable(char contexto, char caracter);

		/**
		 * Función que recibe un contexto y un caracter, y devuelve la probabilidad de que aparezca dicho caracter dado el contexto
		 *
		 */

		public: double getProbability(char contexto, char caracter);

		public: int getFrecuency(char contexto, char caracter);

		private: bool existInListaCaracteresYaExistentes (char caracterABuscar);


		public: double getAcummulatedProbability (char caracter, char contexto);

		public: char getCharByAcummulatedProbability (double acummulatedProbability, char contexto);



		public: int getDivisor (char contexto);
};

#endif /* CONTEXTTABLE_H_ */
